package com.kx.springmybatis.advice;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

import java.util.Random;

/**
 * 实现环绕通知
 * @ClassName MyMethodInterceptor
 * @Author Sun
 * @Date 2021/5/18 19:03
 */
public class MyMethodInterceptor implements MethodInterceptor {
    /**
     * 环绕通知是前置和后置通知的整合体,但是环绕通知可以实现更强的功能
     * 比如我可以决定是否放行执行原始代码
     * 我们还可以决定返回的数据是不是原始返回数据
     * @param methodInvocation
     * @return Object
     * @Author Sun
     * @Date 2021/5/18 19:55
     **/
    @Override
    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
        //执行原始代码
        System.err.println("环绕通知的前半身");
        Object result = methodInvocation.proceed();
        //返回原始数据
//        System.err.println(result);
        //拦截原始结果
        Random random = new Random();
        int i = random.nextInt(2);
        if(i==1){
            //拦截，修改原始结果
            result=1000;
            System.out.println("在环绕通知进行了拦截并修改了原始数据");
            return result;
        }
        //i如果没有拦截返回原始结果
        System.err.println("环绕通知的后半身");
        return result;
    }
}
